package com.softer.chengxin.enterprise.service.impl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.softer.chengxin.common.domin.Common;
import com.softer.chengxin.common.domin.CommonResult;
import com.softer.chengxin.common.domin.Page;
import com.softer.chengxin.common.enums.ResultEnum;
import com.softer.chengxin.enterprise.dao.EnterpriseDao;
import com.softer.chengxin.enterprise.entity.Enterprise;
import com.softer.chengxin.enterprise.service.EnterpriseService;
import com.softer.chengxin.home.dao.HomeDao;
import com.softer.chengxin.login.dao.LoginDao;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author Gong Zhiyang
 * @date 2019/12/12
 */
@Service
public class EnterpriseServiceImpl implements EnterpriseService {
    @Autowired
    private EnterpriseDao enterpriseDao;
    @Autowired
    private LoginDao dao;
    @Autowired
    private HomeDao homeDao;

    /**
     * 企业缺失录入
     *
     * @param enterprise 缺失企业信息
     * @param loginName  登陆人
     * @return 新增结果
     */
    @Override
    public CommonResult add(Enterprise enterprise, String loginName) {
        String code = enterprise.getCode();
        //校验社会统一信用代码是否注册过
        if (StringUtils.isNotBlank(code)) {
            CommonResult result = checkCode(code);
            if (ResultEnum.FAIL.getCode() == result.getData()) {
                return result;
            }
            String enterpriseDaoCode = enterpriseDao.getCode(code);
            if (StringUtils.isNotBlank(enterpriseDaoCode)) {
                return new CommonResult(ResultEnum.FAIL.getCode(), "缺失企业中已经注册过该社会统一信用代码！");
            }
        }
        getName(enterprise, loginName);
        int num = enterpriseDao.add(enterprise);
        return CommonResult.response(num);
    }

    /**
     * 删除缺失企业
     *
     * @param id 企业ID
     * @return 删除结果
     */
    @Override
    public CommonResult delete(int id) {
        int num = enterpriseDao.delete(id);
        return CommonResult.response(num);
    }

    /**
     * 修改缺失企业
     *
     * @param enterprise 企业信息
     * @param loginName  登录名
     * @return 修改结果
     */
    @Override
    public CommonResult update(Enterprise enterprise, String loginName) {
        String code = enterprise.getCode();
        //校验社会统一信用代码是否注册过
        if (StringUtils.isNotBlank(code)) {
            CommonResult result = checkCode(code);
            if (ResultEnum.FAIL.getCode() == result.getData()) {
                return result;
            }
            String enterpriseDaoCode = enterpriseDao.getCode(code);
            if (StringUtils.isNotBlank(enterpriseDaoCode)) {
                Enterprise info = enterpriseDao.getInfo(enterprise.getId());
                if (!enterpriseDaoCode.equals(info.getCode())) {
                    return new CommonResult(ResultEnum.FAIL.getCode(), "缺失企业中已经注册过该社会统一信用代码！");
                }
            }
        }
        getName(enterprise, loginName);
        int num = enterpriseDao.update(enterprise);
        return CommonResult.response(num);
    }

    /**
     * 查询缺失企业详情
     *
     * @param id 企业ID
     * @return 企业信息
     */
    @Override
    public Enterprise getInfo(int id) {
        return enterpriseDao.getInfo(id);
    }

    /**
     * 查询缺失企业列表
     *
     * @param page       分页实体
     * @param enterprise 查询实体
     * @return 缺失企业列表
     */
    @Override
    public PageInfo<Enterprise> getList(Page page, Enterprise enterprise) {
        PageHelper.startPage(page.getPage(), page.getLimit());
        List<Enterprise> list = enterpriseDao.getList(enterprise);
        list.forEach(x -> x.setArea(x.getArea().replaceAll(",", "")));
        return new PageInfo<>(list);
    }


    /**
     * 校验社会统一信用代码是否注册过
     *
     * @param code 社会统一信用代码
     * @return 校验结果
     */
    private CommonResult checkCode(String code) {
        String businessNo = dao.checkBusinessNo(code);
        if (StringUtils.isNotBlank(businessNo)) {
            return new CommonResult(ResultEnum.FAIL.getCode(), "社会统一信用代码已经注册！");
        }
        return new CommonResult(ResultEnum.SUCCESS.getCode(), Common.OPERATE_SUCCESS);
    }

    /**
     * 获取登陆账号的名称
     *
     * @param enterprise 企业实体
     * @param loginName  登陆名
     */
    private void getName(Enterprise enterprise, String loginName) {
        String name = homeDao.getManagerName(loginName);
        enterprise.setCreater(name);
        enterprise.setModifier(name);
    }
}
